package com.hanzidong.cms.controller;

import java.util.Date;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.hanzidong.cms.entity.User;
import com.hanzidong.cms.service.UserService;
import com.hanzidong.cms.util.MD5Util;

@RequestMapping("user")
@Controller
public class UserContorller {
	
	@Resource
	private UserService userService;

	/**
	 * 跳转到注册页面
	 * @return
	 */
	@RequestMapping("toReg")
	public String toReg(Model m) {
		
		m.addAttribute("user", new User());
		return "user/reg";
	}
	
	/**
	 * 进行注册操作
	 * @param user
	 * @return
	 */
	@RequestMapping("reg")
	@ResponseBody
	public boolean reg(@Validated @ModelAttribute("user") User user ,BindingResult result,Model m) {
		
		//进行303校验
		if(result.hasErrors()) {
			//如果有问题，则跳回注册页面
			
			return false;
		}
		
		//设置用户数据
		user.setLocked(0);//用户状态正常
		user.setCreated(new Date());//创建日期为当前
		user.setRole("0");//普通用户
		
		user.setPassword(MD5Util.md5(user.getPassword()));//将密码设置成md5加密
		
		return userService.reg(user);
		
	}
	
	/**
	 * 跳转到登录页面
	 * @return
	 */
	@RequestMapping("toLogin")
	public String toLogin() {
		
		
		return "user/login";
	}
	
	/**
	 * 进行登录操作
	 * @param user
	 * @return
	 */
	@RequestMapping("login")
	@ResponseBody
	public boolean login(User user,HttpSession session) {
		
		//将密码设置成md5加密
		user.setPassword(MD5Util.md5(user.getPassword()));
		
		//根据用户名和密码查询数据
		User login_user = userService.login(user);
		
		//进行判断
		if(login_user !=null) {
			//登录成功将登录的用户数据存入到session中
			session.setAttribute("user", login_user);
			
			//跳转到首页
			return true;
			
		}else {
			//登录失败，则将信息返回给jsp页面
			System.out.println("登录失败");
			
			//跳转到登录页面
			return false;
		}
	}
	
	/**
	 * 注销操作
	 * @param session
	 * @return
	 */
	@RequestMapping("logout")
	public String logout(HttpSession session) {
		
		//清除session中的数据
		session.invalidate();
		
		return "redirect:/";
	}
	
	/**
	 * 校验用户名是否重复
	 * @param username
	 * @return
	 */
	@RequestMapping("checkUsername")
	@ResponseBody
	public boolean checkUsername(String username) {
		
		//查询数据库中是否有该用户名
		Integer count = userService.checkUsername(username);
		
		//如果有，则返回false，不让注册
		if(count != null && count > 0) {
			return false;
		}else {
			return true;
		}
	}
}
